// 重载(overload) 是 多态(polymorphism) 的一种实现形式

// 若要在 JavaScript 中针对函数实现类似于 Java语言中的多态
// 则可以在函数内部根据参数来判断执行那一段代码来实现 
function add() {

    // 第一种情况
    if (arguments.length === 1) {
        return arguments[0];
    }

    // 第二种情况
    if (arguments.length === 2 &&
        typeof(arguments[0]) === 'number' &&
        typeof(arguments[1]) === 'number') {
        return arguments[0] + arguments[1];
    }

    // 第三种情况
    if (arguments.length === 3 &&
        typeof(arguments[0]) === 'number' &&
        typeof(arguments[1]) === 'number' &&
        typeof(arguments[2]) === 'number') {
        return arguments[0] + arguments[1] + arguments[2];
    }

    return undefined;
}


console.log(add(1, 2));

console.log(add(1));

console.log(add(1, 2, 3));
console.log(add())


// 在 Java 语言中可以在同一个类中声明 多个 同名不同参的方法，这些方法即构成重载(overload)
/*  
    public class Student {

        public int add( int a , int b ) {
            return a + b ;
        }

        public int add( int a , int b , int c ) {
            return a + b + c ;
        }

        public double add( double a , int b ) {
            return a + b ;
        }

        public double add( double a , double b ) {
            return a + b ;
        }
    }
 */